﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using FTools.Interface;
using FTools.Comunicacion;
using FTools.Dominio;
using System.Collections;
using FTools.Generico;

namespace FTools.Presentacion
{
    public partial class FrmPersona : Form
    {
        InterfaceIdentificador interfaceIdentificador = new ComIdentificador();
        InterfacePersonaFisica interfacePersonaFisica = new ComPersonaFisica();
        InterfacePersonaJuridica interfacePersonaJuridica = new ComPersonaJuridica();
        InterfacePersonaProveedor interfacePersonaProveedor = new ComPersonaProveedor();
        InterfacePais interfacePais = new ComPais();
        InterfaceDepartamento interfaceDepartamento = new ComDepartamento();
        InterfaceCiudad interfaceCiudad = new ComCiudad();
        InterfaceRubro interfaceRubro = new ComRubro();
        

        /** INICIO FORMULARIO **/
        public FrmPersona()
        {
            InitializeComponent();
        }

        /** CARGA FORMULARIO **/
        private void FrmPersona_Load(object sender, EventArgs e)
        {
            //try
            //{
            cargarComboIdentificadores();
            cargarComboPaises();

            //EVENTOS A CONTROLES
            txtDocumento.GotFocus += new EventHandler(txtDocumento_GotFocus);
            txtDocumento.LostFocus += new EventHandler(txtDocumento_LostFocus);
            tabControlPersonas.SelectedIndexChanged += new EventHandler(tabControlPersonas_SelectedIndexChanged);
            //}
            //catch (Exception ex)
            //{
            //    MessageBox.Show("#Presentacion# " + ex.Message);
            //}
        }

/* ################################################################################################################################ */

#region Botones

        //BOTON GRABAR PERSONAS
        private void btnGrabar_Click(object sender, EventArgs e)
        {
            this.errorProvider1.Clear();
            //try
            //{
            if (tabControlPersonas.SelectedIndex == 0) //PERSONA FISICA
            {
                if (controlPersona(tabControlPersonas.SelectedIndex))
                {
                    PersonaFisica objPersonaFisica = new PersonaFisica();
                    Identificador objIdentificador = (Identificador)cboIdentificadores.SelectedItem;
                    objPersonaFisica.ObjIdentificador = objIdentificador;
                    objPersonaFisica.Documento = txtDocumento.Text;
                    if (txtDocumentoDV.Text != "") { objPersonaFisica.Documento += "-" + txtDocumentoDV.Text; }
                    objPersonaFisica.Apellido1 = txtApellido1.Text;
                    objPersonaFisica.Apellido2 = txtApellido2.Text;
                    objPersonaFisica.Nombre1 = txtNombre1.Text;
                    objPersonaFisica.Nombre2 = txtNombre2.Text;
                    objPersonaFisica.FechaNacimiento = dtpFechaNac.Value.ToShortDateString();
                    objPersonaFisica.Sexo = (String)cboSexo.SelectedItem;
                    //PERSONA
                    objPersonaFisica.Direccion = txtDireccion.Text;
                    objPersonaFisica.Puerta = long.Parse(txtPuerta.Text);
                    objPersonaFisica.Complemento = txtComplemento.Text;
                    if (txtCp.Text != "") objPersonaFisica.Cp = long.Parse(txtCp.Text);
                    objPersonaFisica.Telefono = txtTelefono.Text;
                    objPersonaFisica.Celular = txtCelular.Text;
                    objPersonaFisica.Email = txtEmail.Text;
                    objPersonaFisica.Tipo = "F";
                    objPersonaFisica.ObjCiudad = (Ciudad)cboCiudad.SelectedItem;

                    interfacePersonaFisica.altaPersonaFisica(objPersonaFisica);
                    FuncionesGenericas.limpiarForm(this);
                }
            }
            else if (tabControlPersonas.SelectedIndex == 1) //PERSONA JURIDICA
            {
                if (controlPersona(tabControlPersonas.SelectedIndex))
                {
                    PersonaJuridica objPersonaJuridica = new PersonaJuridica();
                    objPersonaJuridica.RazonSocial = txtRazonSocial.Text;
                    objPersonaJuridica.Rut = txtRut.Text;
                    objPersonaJuridica.Bps = txtBps.Text;
                    objPersonaJuridica.Bse = txtBse.Text;
                    //PERSONA
                    objPersonaJuridica.Direccion = txtDireccion.Text;
                    objPersonaJuridica.Puerta = long.Parse(txtPuerta.Text);
                    objPersonaJuridica.Complemento = txtComplemento.Text;
                    if (txtCp.Text != "") objPersonaJuridica.Cp = long.Parse(txtCp.Text);
                    objPersonaJuridica.Telefono = txtTelefono.Text;
                    objPersonaJuridica.Celular = txtCelular.Text;
                    objPersonaJuridica.Email = txtEmail.Text;
                    objPersonaJuridica.Tipo = "J";
                    objPersonaJuridica.ObjCiudad = (Ciudad)cboCiudad.SelectedItem;

                    interfacePersonaJuridica.altaPersonaJuridica(objPersonaJuridica);
                    FuncionesGenericas.limpiarForm(this);
                }
            }
            else if (tabControlPersonas.SelectedIndex == 2) //PERSONA PROVEEDOR
            {
                if (controlPersona(tabControlPersonas.SelectedIndex))
                {
                    PersonaProveedor objPersonaProveedor = new PersonaProveedor();
                    objPersonaProveedor.NombreProv = txtNombreProv.Text;
                    objPersonaProveedor.ObjRubro = (Rubro)cboRubro.SelectedItem;
                    //PERSONA
                    objPersonaProveedor.Direccion = txtDireccion.Text;
                    objPersonaProveedor.Puerta = long.Parse(txtPuerta.Text);
                    objPersonaProveedor.Complemento = txtComplemento.Text;
                    if (txtCp.Text != "") objPersonaProveedor.Cp = long.Parse(txtCp.Text);
                    objPersonaProveedor.Telefono = txtTelefono.Text;
                    objPersonaProveedor.Celular = txtCelular.Text;
                    objPersonaProveedor.Email = txtEmail.Text;
                    objPersonaProveedor.Tipo = "J";
                    objPersonaProveedor.ObjCiudad = (Ciudad)cboCiudad.SelectedItem;

                    interfacePersonaProveedor.altaPersonaProveedor(objPersonaProveedor);
                    FuncionesGenericas.limpiarForm(this);
                }
            }
            //}
            //catch (Exception ex)
            //{
            //    MessageBox.Show("#Presentacion# " + ex.Message);
            //}
        }

        //BOTON BORRAR PERSONAS
        private void btnBorrar_Click(object sender, EventArgs e)
        {
            this.errorProvider1.Clear();
            //try
            //{
            if (tabControlPersonas.SelectedIndex == 0 && txtIdPersona.Text != "") //PERSONA FISICA
            {
                if (interfacePersonaFisica.existePersonaFisica(Convert.ToInt64(txtIdPersona.Text)))
                {
                    if (MessageBox.Show("¿Esta seguro que desea eliminar la Persona Fisica", "Atencion", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                    {
                        PersonaFisica objPersonaFisica = interfacePersonaFisica.obtenerPersonaFisica(Convert.ToInt64(txtIdPersona.Text));
                        interfacePersonaFisica.bajaPersonaFisica(objPersonaFisica);
                        this.cambioBotones('A');
                        FuncionesGenericas.limpiarForm(this);
                    }
                }
                else
                    MessageBox.Show("La Persona Fisica no existe", "Persona Fisica", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else if (tabControlPersonas.SelectedIndex == 1 && txtIdPersona.Text != "") //PERSONA JURIDICA
            {
                if (interfacePersonaJuridica.existePersonaJuridica(Convert.ToInt64(txtIdPersona.Text)))
                {
                    if (MessageBox.Show("¿Esta seguro que desea eliminar la Persona Juridica", "Atencion", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                    {
                        PersonaJuridica objPersonaJuridica = interfacePersonaJuridica.obtenerPersonaJuridica(Convert.ToInt64(txtIdPersona.Text));
                        interfacePersonaJuridica.bajaPersonaJuridica(objPersonaJuridica);
                        this.cambioBotones('A');
                        FuncionesGenericas.limpiarForm(this);
                    }
                }
                else
                    MessageBox.Show("La Persona Juridica no existe", "Persona Juridica", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else if (tabControlPersonas.SelectedIndex == 2 && txtIdPersona.Text != "") //PERSONA PROVEEDOR
            {
                if (interfacePersonaProveedor.existePersonaProveedor(Convert.ToInt64(txtIdPersona.Text)))
                {
                    if (MessageBox.Show("¿Esta seguro que desea eliminar la Persona Proveedor", "Atencion", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                    {
                        PersonaProveedor objPersonaProveedor = interfacePersonaProveedor.obtenerPersonaProveedor(Convert.ToInt64(txtIdPersona.Text));
                        interfacePersonaProveedor.bajaPersonaProveedor(objPersonaProveedor);
                        this.cambioBotones('A');
                        FuncionesGenericas.limpiarForm(this);
                    }
                }
                else
                    MessageBox.Show("La Persona Proveedor no existe", "Persona Proveedor", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            //}
            //catch (Exception ex)
            //{
            //    MessageBox.Show("#Presentacion# " + ex.Message);
            //}
        }

        //BOTON MODIFICAR PERSONAS
        private void btnModificar_Click(object sender, EventArgs e)
        {
            this.errorProvider1.Clear();
            //try
            //{
            if (tabControlPersonas.SelectedIndex == 0 && txtIdPersona.Text != "") //PERSONA FISICA
            {
                if (controlPersona(tabControlPersonas.SelectedIndex) && interfacePersonaFisica.existePersonaFisica(Convert.ToInt64(txtIdPersona.Text)))
                {
                    PersonaFisica objPersonaFisica = interfacePersonaFisica.obtenerPersonaFisica(Convert.ToInt64(txtIdPersona.Text));
                    Identificador objIdentificador = (Identificador)cboIdentificadores.SelectedItem;
                    objPersonaFisica.ObjIdentificador = objIdentificador;
                    objPersonaFisica.Documento = txtDocumento.Text;
                    if (txtDocumentoDV.Text != "") { objPersonaFisica.Documento += "-" + txtDocumentoDV.Text; }
                    objPersonaFisica.Apellido1 = txtApellido1.Text;
                    objPersonaFisica.Apellido2 = txtApellido2.Text;
                    objPersonaFisica.Nombre1 = txtNombre1.Text;
                    objPersonaFisica.Nombre2 = txtNombre2.Text;
                    objPersonaFisica.FechaNacimiento = dtpFechaNac.Value.ToShortDateString();
                    objPersonaFisica.Sexo = (String)cboSexo.SelectedItem;
                    //PERSONA
                    objPersonaFisica.Direccion = txtDireccion.Text;
                    objPersonaFisica.Puerta = long.Parse(txtPuerta.Text);
                    objPersonaFisica.Complemento = txtComplemento.Text;
                    if (txtCp.Text != "") objPersonaFisica.Cp = long.Parse(txtCp.Text);
                    objPersonaFisica.Telefono = txtTelefono.Text;
                    objPersonaFisica.Celular = txtCelular.Text;
                    objPersonaFisica.Email = txtEmail.Text;
                    objPersonaFisica.Tipo = "F";
                    objPersonaFisica.ObjCiudad = (Ciudad)cboCiudad.SelectedItem;

                    interfacePersonaFisica.modificaPersonaFisica(objPersonaFisica);
                    this.cambioBotones('A');
                    FuncionesGenericas.limpiarForm(this);
                    MessageBox.Show("La Persona Fisica se ha modificado correctamente", "Persona Fisica", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                    MessageBox.Show("La Persona Fisica no existe", "Persona Fisica", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else if (tabControlPersonas.SelectedIndex == 1 && txtIdPersona.Text != "") //PERSONA JURIDICA
            {
                if (controlPersona(tabControlPersonas.SelectedIndex) && interfacePersonaJuridica.existePersonaJuridica(Convert.ToInt64(txtIdPersona.Text)))
                {
                    PersonaJuridica objPersonaJuridica = interfacePersonaJuridica.obtenerPersonaJuridica(Convert.ToInt64(txtIdPersona.Text));
                    objPersonaJuridica.RazonSocial = txtRazonSocial.Text;
                    objPersonaJuridica.Rut = txtRut.Text;
                    objPersonaJuridica.Bps = txtBps.Text;
                    objPersonaJuridica.Bse = txtBse.Text;
                    //PERSONA
                    objPersonaJuridica.Direccion = txtDireccion.Text;
                    objPersonaJuridica.Puerta = long.Parse(txtPuerta.Text);
                    objPersonaJuridica.Complemento = txtComplemento.Text;
                    if (txtCp.Text != "") objPersonaJuridica.Cp = long.Parse(txtCp.Text);
                    objPersonaJuridica.Telefono = txtTelefono.Text;
                    objPersonaJuridica.Celular = txtCelular.Text;
                    objPersonaJuridica.Email = txtEmail.Text;
                    objPersonaJuridica.Tipo = "J";
                    objPersonaJuridica.ObjCiudad = (Ciudad)cboCiudad.SelectedItem;

                    interfacePersonaJuridica.modificaPersonaJuridica(objPersonaJuridica);
                    this.cambioBotones('A');
                    FuncionesGenericas.limpiarForm(this);
                    MessageBox.Show("La Persona Juridica se ha modificado correctamente", "Persona Fisica", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                    MessageBox.Show("La Persona Juridica no existe", "Persona Juridica", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else if (tabControlPersonas.SelectedIndex == 2 && txtIdPersona.Text != "") //PERSONA PROVEEDOR
            {
                if (controlPersona(tabControlPersonas.SelectedIndex) && interfacePersonaProveedor.existePersonaProveedor(Convert.ToInt64(txtIdPersona.Text)))
                {
                    PersonaProveedor objPersonaProveedor = interfacePersonaProveedor.obtenerPersonaProveedor(Convert.ToInt64(txtIdPersona.Text));
                    objPersonaProveedor.NombreProv = txtNombreProv.Text;
                    objPersonaProveedor.ObjRubro = (Rubro)cboRubro.SelectedItem;
                    //PERSONA
                    objPersonaProveedor.Direccion = txtDireccion.Text;
                    objPersonaProveedor.Puerta = long.Parse(txtPuerta.Text);
                    objPersonaProveedor.Complemento = txtComplemento.Text;
                    if (txtCp.Text != "") objPersonaProveedor.Cp = long.Parse(txtCp.Text);
                    objPersonaProveedor.Telefono = txtTelefono.Text;
                    objPersonaProveedor.Celular = txtCelular.Text;
                    objPersonaProveedor.Email = txtEmail.Text;
                    objPersonaProveedor.Tipo = "P";
                    objPersonaProveedor.ObjCiudad = (Ciudad)cboCiudad.SelectedItem;

                    interfacePersonaProveedor.modificaPersonaProveedor(objPersonaProveedor);
                    this.cambioBotones('A');
                    FuncionesGenericas.limpiarForm(this);
                    MessageBox.Show("La Persona Proveedor se ha modificado correctamente", "Persona Fisica", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                    MessageBox.Show("La Persona Proveedor no existe", "Persona Proveedor", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }

            //}
            //catch (Exception ex)
            //{
            //    MessageBox.Show("#Presentacion# " + ex.Message);
            //}
        }

        //BOTON BUSCAR PERSONAS
        private void btnBuscar_Click(object sender, EventArgs e)
        {
            this.errorProvider1.Clear();
            if (tabControlPersonas.SelectedIndex == 0) //PERSONA FISICA
            {
                if (txtDocumento.Text != "" || txtApellido1.Text != "" || txtApellido2.Text != "" || txtNombre1.Text != "" || txtNombre2.Text != "")
                {
                    ArrayList colPersonasFisicas = interfacePersonaFisica.obtenerBusquedaPersonaFisica(txtDocumento.Text, txtApellido1.Text, txtApellido2.Text, txtNombre1.Text, txtNombre2.Text);
                    this.cargarLvwPersona(colPersonasFisicas, "F");
                }
                else
                    MessageBox.Show("Debe ingresar filtro de busqueda", "Busqueda", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
            else if (tabControlPersonas.SelectedIndex == 1) //PERSONA JURIDICA
            {
                if (txtRazonSocial.Text != "" || txtRut.Text != "" || txtBps.Text != "" || txtBse.Text != "")
                {
                    ArrayList colPersonasJuridicas = interfacePersonaJuridica.obtenerBusquedaPersonaJuridica(txtRazonSocial.Text, txtRut.Text, txtBps.Text, txtBse.Text);
                    this.cargarLvwPersona(colPersonasJuridicas, "J");
                }
                else
                    MessageBox.Show("Debe ingresar filtro de busqueda", "Busqueda", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
            else if (tabControlPersonas.SelectedIndex == 2) //PERSONA PROVEEDOR
            {
                if (txtNombreProv.Text != "" || cboRubro.SelectedIndex >= 0)
                {
                    long idRubro = 0;
                    if (cboRubro.SelectedIndex >= 0)
                    {
                        Rubro objRubro = (Rubro)cboRubro.SelectedItem;
                        idRubro = objRubro.IdRubro;
                    }
                    Console.WriteLine(txtNombreProv.Text);
                    Console.WriteLine(idRubro);
                    ArrayList colPersonasProveedores = interfacePersonaProveedor.obtenerBusquedaPersonaProveedor(txtNombreProv.Text, idRubro);
                    this.cargarLvwPersona(colPersonasProveedores, "P");
                }
                else
                    MessageBox.Show("Debe ingresar filtro de busqueda", "Busqueda", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
            
        }

#endregion

/* ################################################################################################################################ */
        
#region Metodos

        //METODO CONTROL INGRESO PERSONA (FISICA, JURIDICA Y PROVEEDOR) ...
        public Boolean controlPersona(int xTab)
        {
            if (xTab == 0)
            {
                if (cboIdentificadores.SelectedIndex >= 0 && txtNombre1.Text != "" && txtApellido1.Text != "" &&
                    dtpFechaNac.Value <= DateTime.Now && cboSexo.SelectedIndex >= 0)
                {
                    if(controlPersonaGenerico())
                    {
                        return true;
                    }
                }
                else if (cboIdentificadores.SelectedIndex < 0)
                {
                    this.errorProvider1.SetError(cboIdentificadores, "Debe seleccionar Identificador");
                }
                else if (txtDocumento.Text == "")
                {
                    this.errorProvider1.SetError(txtDocumentoDV, "Debe ingresar Documento");
                    txtDocumento.Focus();
                }
                else if (txtNombre1.Text == "")
                {
                    this.errorProvider1.SetError(txtNombre1, "Debe ingresar Nombre");
                    txtNombre1.Focus();
                }
                else if (txtApellido1.Text == "")
                {
                    this.errorProvider1.SetError(txtApellido1, "Debe ingresar Apellido");
                    txtApellido1.Focus();
                }
                else if (dtpFechaNac.Value > DateTime.Now)
                {
                    this.errorProvider1.SetError(dtpFechaNac, "Fecha Nacimiento Incorrecta");
                }
                else if (cboSexo.SelectedIndex < 0)
                {
                    this.errorProvider1.SetError(cboSexo, "Debe seleccionar Sexo");
                }
            }
            else if (xTab == 1)
            {
                if (txtRazonSocial.Text != "" && txtRut.Text != "")
                {
                    if(controlPersonaGenerico())
                    {
                        return true;
                    }
                }
                else if (txtRazonSocial.Text == "")
                {
                    this.errorProvider1.SetError(txtRazonSocial, "Debe ingresar Razon Social");
                }
                else if (txtRut.Text == "")
                {
                    this.errorProvider1.SetError(txtRut, "Debe ingresar Rut");
                }
            }
            else if (xTab == 2)
            {
                if (txtNombreProv.Text != "" && cboRubro.SelectedIndex >= 0)
                {
                    if (controlPersonaGenerico())
                    {
                        return true;
                    }
                }
                else if (txtNombreProv.Text == "")
                {
                    this.errorProvider1.SetError(txtNombreProv, "Debe ingresar Nombre");
                }
                else if (cboRubro.SelectedIndex < 0)
                {
                    this.errorProvider1.SetError(cboRubro, "Debe seleccionar Rubro");
                }
            }
            return false;
        }

        //METODO CONTROL DATOS COMUNES DE PERSONAS
        public Boolean controlPersonaGenerico() 
        {
            if (txtDireccion.Text != "" && txtPuerta.Text != "" && cboPais.SelectedIndex >= 0 && cboDepartamento.SelectedIndex >= 0 && cboCiudad.SelectedIndex >= 0)
            {
                return true;
            }
            else if (txtDireccion.Text == "")
            {
                this.errorProvider1.SetError(txtDireccion, "Debe ingresar Direccion");
                txtDireccion.Focus();
            }
            else if (txtPuerta.Text == "")
            {
                this.errorProvider1.SetError(txtPuerta, "Debe ingresar Nro Puerta, para S/N digite 0");
                txtPuerta.Focus();
            }
            else if (cboPais.SelectedIndex < 0)
            {
                this.errorProvider1.SetError(cboPais, "Debe seleccionar Pais");
            }
            else if (cboDepartamento.SelectedIndex < 0)
            {
                this.errorProvider1.SetError(cboDepartamento, "Debe seleccionar Departamento");
            }
            else if (cboCiudad.SelectedIndex < 0)
            {
                this.errorProvider1.SetError(cboCiudad, "Debe seleccionar Ciudad");
            }
            return false;
        }

        //CARGAR COMBO IDENTIFICADORES
        public void cargarComboIdentificadores()
        {
            ArrayList colIdentificador = interfaceIdentificador.obtenerColeccionIdentificador();
            //cboIdentificadores.DataSource = colIdentificador;
            foreach (Identificador objIdentificador in colIdentificador)
            {
                cboIdentificadores.Items.Add(objIdentificador);
            }
        }

        //CARGAR COMBO PAIS
        public void cargarComboPaises()
        {
            cboPais.Items.Clear();
            ArrayList colPais = interfacePais.obtenerColeccionPais();
            foreach (Pais objPais in colPais)
            {
                cboPais.Items.Add(objPais);
            }

        }
        private void cboPais_SelectedIndexChanged(object sender, EventArgs e)
        {
            cboDepartamento.Items.Clear();
            cboCiudad.Items.Clear();
            if (cboPais.SelectedIndex >= 0)
            {
                Pais objPais = (Pais)cboPais.SelectedItem;
                cargarComboDepartamentos(objPais.IdPais);
            }
        }

        //CARGAR COMBO DEPARTAMENTOS
        public void cargarComboDepartamentos(long xIdPais)
        {
            cboDepartamento.Items.Clear();
            ArrayList colDepartamento = interfaceDepartamento.obtenerColeccionDepartamento(xIdPais);
            foreach (Departamento objDepartamento in colDepartamento)
            {
                cboDepartamento.Items.Add(objDepartamento);
            }
        }
        private void cboDepartamento_SelectedIndexChanged(object sender, EventArgs e)
        {
            cboCiudad.Items.Clear();
            if (cboDepartamento.SelectedIndex >= 0)
            {
                Departamento objDepartamento = (Departamento)cboDepartamento.SelectedItem;
                cargarComboCiudades(objDepartamento.IdDepartamento);
            }
        }

        //CARGAR COMBO CIUDADES
        public void cargarComboCiudades(long xIdDepartamento)
        {
            cboCiudad.Items.Clear();
            ArrayList colCiudad = interfaceCiudad.obtenerColeccionCiudad(xIdDepartamento);
            foreach (Ciudad objCiudad in colCiudad)
            {
                cboCiudad.Items.Add(objCiudad);
            }
        }
        
        //CARGAR LISTVIEW PERSONAS
        private void cargarLvwPersona(ArrayList colPersonas, String xTipo)
        {
            //try
            //{
            lvwPersona.Items.Clear();
            ListViewItem x;

            if (xTipo.Equals("F"))
            {
                lvwPersona.Columns.Clear();
                lvwPersona.Columns.Add("ID", 80, HorizontalAlignment.Left);
                lvwPersona.Columns.Add("Documento", 80, HorizontalAlignment.Left);
                lvwPersona.Columns.Add("Primer Apellido", 120, HorizontalAlignment.Left);
                lvwPersona.Columns.Add("Segundo Apellido", 120, HorizontalAlignment.Left);
                lvwPersona.Columns.Add("Primer Nombre", 120, HorizontalAlignment.Left);
                lvwPersona.Columns.Add("Segundo Nombre", 120, HorizontalAlignment.Left);
                lvwPersona.ForeColor = SystemColors.ActiveCaptionText;
                foreach (PersonaFisica objPersonaFisica in colPersonas)
                {
                    x = lvwPersona.Items.Add(Convert.ToString(objPersonaFisica.IdPersona));
                    x.SubItems.Add(objPersonaFisica.Documento);
                    x.SubItems.Add(objPersonaFisica.Apellido1);
                    x.SubItems.Add(objPersonaFisica.Apellido2);
                    x.SubItems.Add(objPersonaFisica.Nombre1);
                    x.SubItems.Add(objPersonaFisica.Nombre2);
                    x.Tag = objPersonaFisica;
                }
            }
            else if (xTipo.Equals("J"))
            {
                lvwPersona.Columns.Clear();
                lvwPersona.Columns.Add("ID", 80, HorizontalAlignment.Left);
                lvwPersona.Columns.Add("Razon Social", 120, HorizontalAlignment.Left);
                lvwPersona.Columns.Add("RUT", 100, HorizontalAlignment.Left);
                lvwPersona.Columns.Add("BPS", 100, HorizontalAlignment.Left);
                lvwPersona.Columns.Add("BSE", 100, HorizontalAlignment.Left);
                lvwPersona.ForeColor = SystemColors.ActiveCaptionText;
                foreach (PersonaJuridica objPersonaJuridica in colPersonas)
                {
                    x = lvwPersona.Items.Add(Convert.ToString(objPersonaJuridica.IdPersona));
                    x.SubItems.Add(objPersonaJuridica.RazonSocial);
                    x.SubItems.Add(objPersonaJuridica.Rut);
                    x.SubItems.Add(objPersonaJuridica.Bps);
                    x.SubItems.Add(objPersonaJuridica.Bse);
                    x.Tag = objPersonaJuridica;
                }
            }
            else if (xTipo.Equals("P"))
            {
                lvwPersona.Columns.Clear();
                lvwPersona.Columns.Add("ID", 80, HorizontalAlignment.Left);
                lvwPersona.Columns.Add("Proveedor", 160, HorizontalAlignment.Left);
                lvwPersona.Columns.Add("Rubro", 120, HorizontalAlignment.Left);
                lvwPersona.ForeColor = SystemColors.ActiveCaptionText;
                foreach (PersonaProveedor objPersonaProveedor in colPersonas)
                {
                    x = lvwPersona.Items.Add(Convert.ToString(objPersonaProveedor.IdPersona));
                    x.SubItems.Add(objPersonaProveedor.NombreProv);
                    x.SubItems.Add(objPersonaProveedor.ObjRubro.Nombre);
                    x.Tag = objPersonaProveedor;
                }
            }
            if (colPersonas.Count == 0)
            {
                lvwPersona.Columns.Clear();
                lvwPersona.Columns.Add("Resultado de Busqueda", 200, HorizontalAlignment.Left);
                lvwPersona.ForeColor = SystemColors.GrayText;
                lvwPersona.Items.Add("No se encontraron resultados");
            }
            //}
            //catch (Exception ex)
            //{
            //    MessageBox.Show("#Presentacion# " + ex.Message);
            //}
        }

        //CAMBIO BOTONES ALTA Y MODIF
        private void cambioBotones(char xChar)
        {
            if (xChar.Equals('A'))
            {
                btnGrabar.Visible = true;
                btnModificar.Visible = false;
            }
            else if (xChar.Equals('M'))
            {
                btnGrabar.Visible = false;
                btnModificar.Visible = true;
            }
        }

        //CARGAR COMBO RUBRO
        public void cargarComboRubro()
        {
            cboRubro.Items.Clear();
            ArrayList colRubro = interfaceRubro.obtenerColeccionRubro();
            foreach (Rubro objRubro in colRubro)
            {
                cboRubro.Items.Add(objRubro);
            }
        }

        
#endregion 

/* ################################################################################################################################ */

#region Controles
        
        //TXTDOCUMENTO
        private void txtDocumento_GotFocus(Object sender, EventArgs e)
        {

        }
        private void txtDocumento_LostFocus(Object sender, EventArgs e)
        {
            if (FuncionesGenericas.digitoVerificadorCI(txtDocumento.Text) >= 0)
            txtDocumentoDV.Text = Convert.ToString(FuncionesGenericas.digitoVerificadorCI(txtDocumento.Text));
        }

        //LABEL PERSONAS LIMPIA
        private void labelPersonas_Click(object sender, EventArgs e)
        {
            this.cambioBotones('A');
            FuncionesGenericas.limpiarForm(this);
        }

        //CAMBIO PESTAÑAS EN TABCONTROL
        private void tabControlPersonas_SelectedIndexChanged(Object sender, EventArgs e)
        {
            errorProvider1.Clear();
            lvwPersona.Items.Clear();
            lvwPersona.Columns.Clear();
            if (tabControlPersonas.SelectedIndex == 0)//PF
            {
                labelPersonas.Text = "Personas Fisicas";
                this.cambioBotones('A');
                FuncionesGenericas.limpiarForm(this);
            }
            else if (tabControlPersonas.SelectedIndex == 1)//PJ
            {
                labelPersonas.Text = "Personas Juridicas";
                this.cambioBotones('A');
                FuncionesGenericas.limpiarForm(this);
            }
            else if (tabControlPersonas.SelectedIndex == 2)//PP
            {
                labelPersonas.Text = "Personas Proveedores";
                this.cambioBotones('A');
                FuncionesGenericas.limpiarForm(this);
                this.cargarComboRubro();
            }
        }

        //SELECCION LISTVIEW PERSONAS
        private void lvwPersona_SelectedIndexChanged(object sender, EventArgs e)
        {
            //try
            //{
            if (lvwPersona.SelectedItems.Count > 0)
            {
                foreach (ListViewItem x in lvwPersona.SelectedItems)
                {
                    if (tabControlPersonas.SelectedIndex == 0 && x.Tag != null)
                    {
                        PersonaFisica objPersonaFisica = (PersonaFisica)x.Tag;
                        txtIdPersona.Text = Convert.ToString(objPersonaFisica.IdPersona);
                        cboIdentificadores.Text = objPersonaFisica.ObjIdentificador.Nombre;
                        if (objPersonaFisica.Documento.Contains('-'))
                        {
                            String[] str = objPersonaFisica.Documento.Split('-');
                            txtDocumento.Text = str[0].ToString();
                            txtDocumentoDV.Text = str[1].ToString();
                            txtDocumentoDV.Text = str[1].ToString();
                        }
                        else
                        {
                            txtDocumento.Text = objPersonaFisica.Documento;
                        }
                        txtNombre1.Text = objPersonaFisica.Nombre1;
                        txtNombre2.Text = objPersonaFisica.Nombre2;
                        txtApellido1.Text = objPersonaFisica.Apellido1;
                        txtApellido2.Text = objPersonaFisica.Apellido2;
                        dtpFechaNac.Value = Convert.ToDateTime(objPersonaFisica.FechaNacimiento);
                        cboSexo.SelectedItem = objPersonaFisica.Sexo;
                        txtDireccion.Text = objPersonaFisica.Direccion;
                        txtPuerta.Text = Convert.ToString(objPersonaFisica.Puerta);
                        txtComplemento.Text = objPersonaFisica.Complemento;
                        txtCp.Text = Convert.ToString(objPersonaFisica.Cp);
                        //COMBOS LUGARES
                        this.cargarComboPaises();
                        cboPais.Text = objPersonaFisica.ObjCiudad.ObjDepartamento.ObjPais.Nombre;
                        this.cargarComboDepartamentos(objPersonaFisica.ObjCiudad.ObjDepartamento.ObjPais.IdPais);
                        cboDepartamento.Text = objPersonaFisica.ObjCiudad.ObjDepartamento.Nombre;
                        this.cargarComboCiudades(objPersonaFisica.ObjCiudad.ObjDepartamento.IdDepartamento);
                        cboCiudad.Text = objPersonaFisica.ObjCiudad.Nombre;
                        //
                        txtTelefono.Text = objPersonaFisica.Telefono;
                        txtEmail.Text = objPersonaFisica.Email;
                        txtCelular.Text = objPersonaFisica.Celular;
                        this.cambioBotones('M');
                    }
                    else if (tabControlPersonas.SelectedIndex == 1 && x.Tag != null)
                    {
                        PersonaJuridica objPersonaJuridica = (PersonaJuridica)x.Tag;
                        txtIdPersona.Text = Convert.ToString(objPersonaJuridica.IdPersona);
                        txtRazonSocial.Text = objPersonaJuridica.RazonSocial;
                        txtRut.Text = objPersonaJuridica.Rut;
                        txtBps.Text = objPersonaJuridica.Bps;
                        txtBse.Text = objPersonaJuridica.Bse;
                        txtDireccion.Text = objPersonaJuridica.Direccion;
                        txtPuerta.Text = Convert.ToString(objPersonaJuridica.Puerta);
                        txtComplemento.Text = objPersonaJuridica.Complemento;
                        txtCp.Text = Convert.ToString(objPersonaJuridica.Cp);
                        //COMBOS LUGARES
                        this.cargarComboPaises();
                        cboPais.Text = objPersonaJuridica.ObjCiudad.ObjDepartamento.ObjPais.Nombre;
                        this.cargarComboDepartamentos(objPersonaJuridica.ObjCiudad.ObjDepartamento.ObjPais.IdPais);
                        cboDepartamento.Text = objPersonaJuridica.ObjCiudad.ObjDepartamento.Nombre;
                        this.cargarComboCiudades(objPersonaJuridica.ObjCiudad.ObjDepartamento.IdDepartamento);
                        cboCiudad.Text = objPersonaJuridica.ObjCiudad.Nombre;
                        //
                        txtTelefono.Text = objPersonaJuridica.Telefono;
                        txtEmail.Text = objPersonaJuridica.Email;
                        txtCelular.Text = objPersonaJuridica.Celular;
                        this.cambioBotones('M');
                    }
                    else if (tabControlPersonas.SelectedIndex == 2 && x.Tag != null)
                    {
                        PersonaProveedor objPersonaProveedor = (PersonaProveedor)x.Tag;
                        txtIdPersona.Text = Convert.ToString(objPersonaProveedor.IdPersona);
                        txtNombreProv.Text = objPersonaProveedor.NombreProv;
                        cboRubro.Text = objPersonaProveedor.ObjRubro.Nombre;
                        txtDireccion.Text = objPersonaProveedor.Direccion;
                        txtPuerta.Text = Convert.ToString(objPersonaProveedor.Puerta);
                        txtComplemento.Text = objPersonaProveedor.Complemento;
                        txtCp.Text = Convert.ToString(objPersonaProveedor.Cp);
                        //COMBOS LUGARES
                        this.cargarComboPaises();
                        cboPais.Text = objPersonaProveedor.ObjCiudad.ObjDepartamento.ObjPais.Nombre;
                        this.cargarComboDepartamentos(objPersonaProveedor.ObjCiudad.ObjDepartamento.ObjPais.IdPais);
                        cboDepartamento.Text = objPersonaProveedor.ObjCiudad.ObjDepartamento.Nombre;
                        this.cargarComboCiudades(objPersonaProveedor.ObjCiudad.ObjDepartamento.IdDepartamento);
                        cboCiudad.Text = objPersonaProveedor.ObjCiudad.Nombre;
                        //
                        txtTelefono.Text = objPersonaProveedor.Telefono;
                        txtEmail.Text = objPersonaProveedor.Email;
                        txtCelular.Text = objPersonaProveedor.Celular;
                        this.cambioBotones('M');
                    }
                }
            }
            else
            {
                //FuncionesGenericas.limpiarForm(this);
                FuncionesGenericas.limpiarTextForm(this);
                FuncionesGenericas.limpiarComboForm(this);
                FuncionesGenericas.limpiarDtpForm(this);
                this.cambioBotones('A');
            }
            //}
            //catch (Exception ex)
            //{
            //    MessageBox.Show("#Presentacion# " + ex.Message);
            //}
        }
        

#endregion

        

  




    }
}
